package com.atguigu.spring.webflux;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @description:
 * @author zp
 * @date: 2022/9/10 14:46
 *
 * 响应式编程：
 * 1、reactor是满足Reactive规范的框架
 * 2、Mono 实现了 org.reactivestreams.Publisher 接口，代表0到1个元素的响应式序列。
 * Flux 同样实现了 org.reactivestreams.Publisher 接口，代表0到N个元素的结果。
 *
 * onNext、onComplete或onError方法的调用 每个都有三种信号 数值信号 完成信号 错误信号
 * 完成信号和错误信号 都是表示终止的信号，表示该数据流已经结束了，如果是完成信号表示正常完成 如果是错误信号结束该数据流但是还是会返回错误信息
 *
 * 错误信号和完成信号都是终止信号 他们不能共存
 * 如果没有发送任何元素值，而是直接发送完成或者错误信号 说明这是一个空的数据流
 * 没有错误信号和完成信号说明这是一个不会停止的无限流
 *
 * webflux对元素的操作
 * map操作可以将数据元素进行转换/映射，得到一个新元素。
 * flatMap操作可以将每个数据元素转换/映射为一个流，然后将这些流合并为一个大的数据流
 * filter操作可以对数据元素进行筛选。
 * 看到zip这个词可能会联想到拉链，它能够将多个流一对一的合并起来。zip有多个方法变体，我们介绍一个最常见的二合一的。
 *
 * reactor和java8 stream区别
 * 1、形似而神不似
 * 2、reactor：push模式，服务端推送数据给客户端
 * 3、java8 stream：pull模式，客户端主动向服务端请求数据
 *
 * 默认基于的web容器是 Netty
 * Netty是一个高性能 NIO（异步非阻塞的框架）区别的就是BIO（同步阻塞的）
 */
@SpringBootApplication
public class WebfluxApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebfluxApplication.class, args);
    }

}
